<?php
function base_url() {
	if (isset($_SERVER['HTTP_HOST'])) {
		$base_url = isset($_SERVER['HTTPS']) &&
			strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
		$base_url .= '://'. $_SERVER['HTTP_HOST'];
		$base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']),
										'', $_SERVER['SCRIPT_NAME']);
	} else {
		$base_url = 'http://localhost/';
	}
	return $base_url;
}

/**
 * 格式化打印数组
 */
function dumpall($data){
	echo '<pre>';
	print_r($data);
	echo '</pre>';
}

/**
 * 数组分页函数  核心函数  array_slice
 * 用此函数之前要先将数据库里面的所有数据按一定的顺序查询出来存入数组中
 * $count   每页多少条数据
 * $page   当前第几页
 * $array   查询出来的所有数组
 * order 0 - 不变     1- 反序
 */

function page_array($count,$page,$array,$order=0){
	global $countpage; #定全局变量
	$page=(empty($page))?'1':$page; #判断当前页面是否为空 如果为空就表示为第一页面
	$start=($page-1)*$count; #计算每次分页的开始位置
	if($order==1){
		$array=array_reverse($array);
	}
	$totals=count($array);
	$countpage=ceil($totals/$count); #计算总页面数
	$pagedata=array();
	$pagedata=array_slice($array,$start,$count);
	return $pagedata;  #返回查询数据
}

/**
 * 日志---在项目根目录下生成文件
 * 若没有生成文件，检查所在目录和函数调用目录读写权限
 * @param  [type] $desc [description]
 * @return [type]       [description]
 */
function logs($desc,$append=false,$file='0205.html'){
	$str="\n\n<br><br>".date('Y-m-d H:i:s').'==='.microtime()."\n<br>";
	if(is_array($desc)){
		$desc=var_export($desc,TRUE);
		$desc="<pre>".$desc."</pre>";
	}
	$str.=$desc;
	if($append){
		file_put_contents($file,$str,FILE_APPEND);
	}else{
		$str="<meta charset='utf-8'>".$str;
		file_put_contents($file,$str);
	}
}

/** 
* @desc 根据两点间的经纬度计算距离 
* @param float $lat 纬度值 29.58228
* @param float $lng 经度值 106.539082
*/
function getDistance($lat1, $lng1, $lat2, $lng2){ 
	$earthRadius = 6367000; //approximate radius of earth in meters 
	$lat1 = ($lat1 * pi() ) / 180; 
	$lng1 = ($lng1 * pi() ) / 180; 
	$lat2 = ($lat2 * pi() ) / 180; 
	$lng2 = ($lng2 * pi() ) / 180; 
	$calcLongitude = $lng2 - $lng1; 
	$calcLatitude = $lat2 - $lat1; 
	$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); 
	$stepTwo = 2 * asin(min(1, sqrt($stepOne))); 
	$calculatedDistance = $earthRadius * $stepTwo; 
	return $calculatedDistance; 
	// 第二种算法 不准确，但效率高
	/*$a=$lng1-$lng2;
	$b=$lat1-$lat2;
	$d=($a*$a)+($b*$b);
	$d=sqrt($d)*109580;//
	return $d;*/
}


/**
*获取广告图的跳转链接
*jump_type  1首页的轮播图 2动态广告
*jump_id  详情id
*jump_params 其余参数 传过来的格式：sale_rent=1&aa=66
*jump_url  判断有id跳对应商品，没id跳链接，链接也没有不跳转
*/
 function analysisUrl($jump_type,$jump_id,$jump_url){
     return '';
 	// return $jump_params;
	$url=base_url().'index.php/Home/';
	switch ($jump_type) {
		case 1:
			$url.='Mall/goodsDetail/g_id/'.$jump_id;
			break;
		case 2:
			$url=$jump_url;
			break;
		case 3:
			$url.='Notice/announceDt/n_id/'.$jump_id;
			break;
		case 4:
			// $jump_params=explode('=',$jump_params);
			// if($jump_params==1){
				// 跳买房详情
				$url.='Home/houseDetail/home_id/'.$jump_id;
				if(!empty($_SESSION['userinfo'])){
					$user=unserialize($_SESSION['userinfo']);
					$url.='/u_id/'.$user['u_id'];
				}
				
			// }elseif($jump_params==2){
				// 跳租房详情
				// $url.='Home/rentDetail/h_id/'.$jump_id;
			// }
			break;
		
		default:
			# code...
			break;
	}
	return $url;
}

/*  
 * 获取首页动态跳转链接
 * 
 * */
function getIndexDongtaiUrl($d_id){
    return '';
    $url=base_url().'index.php/Home/Index/d_id'.$d_id;
    /* switch ($d_id){
        case '9':
            $url.='Home/Index/d_id/'.$d_id;
            break;
        case '10':
            $url.='Home/Index/d_id'.$d_id;
            break;
    } */
}
/**
*获取首页按钮跳转链接
*/
 function getIndexModuleUrl($type){
     return '';
	$url=base_url().'index.php/Home/';
	switch ($type) {
		case '1':
			// 物业缴费
			$url.='User/addSubd?redirect_url='.U('Wuyepay/paymentDet');
			break;
		case '2':
			// 报事报修
			$url.='Case/ownerReport';
			break;
		case '3':
			// 投诉建议
			$url.='User/complainIndex';
			break;
		case '4':
			// 社区公告
			$url.='Notice/announceList';
			break;
		case '5':
			// 社区商城
			$url.='Mall/shop';
			break;
		case '6':
			// 家政服务
			$url.='Jiazheng/houseKIndex';
			break;
		case '7':
			// 租售中心
			$url.='Home/houseIndex';
			break;
		case '8':
			// 便民服务
			$url.='BianMin/convenience';
			break;
		case '9':
			// 在线调查
			$url.='';
			break;
		case '10':
			// 加州社区
			$url.='Community/community';
			break;
		case '11':
			// 政务信息
			$url.='';
			break;
		case '12':
			// 政务信息
			$url.='';
			break;			
		default:
			break;
	}
	return $url;
}
/**
*小数转百分比
*/
function float2rate($n){
	if(empty($n)){
		return '100%';
	}
	return (string)($n*100).'%';
} 


/**
*生成订单编号 不能重复
*18位数字
*/
function createSn(){
	return date('YmdHis').mt_rand(10,99).generate_password(2,'8713425069');
}
/**
 * 生成核销码 不能重复
 * 16位
*/
function createHxcode(){
	return 'M'.generate_password(3).date('Ymd').mt_rand(1000,9999);
}
/**
 * 生成随机字符串
 */
function generate_password( $length = 8 ,$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
	$password = '';
	for ( $i = 0; $i < $length; $i++ )
	{
		// 这里提供两种字符获取方式
		// 第一种是使用 substr 截取$chars中的任意一位字符；
		// 第二种是取字符数组 $chars 的任意元素
		// $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
		$password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
	}
	return $password;
}


/**
*解析 xml
*/


/**
 * 判断商品是否重复
 * g_id  商品id
 * goodslist 二维数组
 */
function goods_array_exist($g_id,$goodslist){
	foreach ($goodslist as $k => $v) {
		if($v['g_id']==$g_id){
			return true;//商品id已存在
		}
	}
	return false;//不存在
}

/**
 * 判断某个值是否在二维数组中存在
 * 目的：去重
 * $param_name  字段名
 * $param_val  字段值
 * $arr 二维数组
 */
function exist_in_matrix($param_name,$param_val,$arr){
	foreach ($arr as $k => $v) {
		if($v[$param_name]==$param_val){
			return true;//已存在
		}
	}
	return false;//不存在
}

/**
 * 字符串截取，支持中文和其他编码
 * @static
 * @access public
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $charset 编码格式
 * @param string $suffix 截断显示字符
 * @return string
 */
function msubstr($str,$start=0,$length,$endchar=false) {
	$charset="utf-8";
    if(function_exists("mb_substr"))
        $slice = mb_substr($str, $start, $length, $charset);
    elseif(function_exists('iconv_substr')) {
        $slice = iconv_substr($str,$start,$length,$charset);
    }else{
        $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
        preg_match_all($re[$charset], $str, $match);
        $slice = join("",array_slice($match[0], $start, $length));
    }
    
    return $endchar ? $slice.'...' : $slice;
}


/**
 * 获取富文本编辑器上传的内容中的图片，补充正确路径
 */
function fullimgInhtml($content){
	preg_match_all("/<img(.*)(src=\"[^\"]+\")[^>]+>/isU", $content, $arr); 
	// dumpall($arr);die;	
	// dumpall($arr[0][0]);die;
	for($i=0;$i<count($arr[0]);$i++){
		// dumpall($arr[0][$i]);die;
		$old_src_attr=$arr[2][$i];
		$old_src_val=str_replace('src="','',$old_src_attr);
		$old_src_val=str_replace('"','', $old_src_val);
		$new_src_val=base_url().$old_src_val;
		if(strpos($old_src_val,'/ueditor/upload/')!==false && strpos($old_src_val, 'http')===false){
				$content=str_replace($old_src_val,$new_src_val,$content);
		}
	}
	/*$content='<html><head><meta name="viewport"content="width=device-width, initial-scale=1.0, user-scalable=no"/><style>img{width:100%;}*{max-width:100%;}</style><body>'.$content.'</body></html>';
	dumpall($content);die;*/
	// dumpall($arr);die;
	return $content;
}

/**
 * 处理手机号 18580229220 -》 185****9220
 */
function encryptTel($tel){
	return substr($tel, 0,3).'****'.substr($tel,7,4);
}
/**
 * 图片字符串，转数组
 */
function _formatImgsToArr($imgs){
	$imgsarr=array();
	if($imgs){
		$imgsarr=explode(',',$imgs);
	}
	return $imgsarr;
}
/**
 * 按数组某一个字段的值对数组排序
 */
function sortArrByField(&$array, $field, $desc = false){
	$fieldArr = array();
	foreach ($array as $k => $v) {
		$fieldArr[$k] = $v[$field];
	}
	$sort = $desc == false ? SORT_ASC : SORT_DESC;
	array_multisort($fieldArr, $sort, $array);
}
/**
 * 取二维数组中的某一列的值
*/
function array_column_mine($arr,$field,$index=null){
	$data=array();
	foreach ($arr as $k=>$v){
		if($index){
			$data[$v[$index]]=$v[$field];
		}else{
			$data[$k]=$v[$field];
		}
	}
	return $data;
}
/**
 *取二维数组中某一字段的所有值，不重复
*/
function getUniqueFieldValByFieldName($arr,$field){
	$data=array_column_mine($arr,$field);
	$data=array_unique($data);
	return array_merge($data);
}
/**
 * 二维数组按照某一键值去重
*/
function array_uniq_mine($arr,$field){
	$data=array();
	foreach ($arr as $v){
		if(!array_key_exists($v[$field],$data)){
			$data[$v[$field]]=$v;
		}
	}
	return $data;
}
/**
 * 生成32位加密字符串
*/
function encStr($str){
	$str.='a3*&#W';
	return md5($str);
}
/**
 *根据当前页码获取周围的页码
 * p 当前页面
 *maxPage 最大页码
 *imin i的起始值
 * imax i的结束值，如imin=-2 imax=2 -2到2最多返回5个页码
 */
function getPageNumbers($p,$maxPage,$imin=-2,$imax=2){
	for($i=$imin;$i<=$imax;$i++){
		$px=$p+$i;
		if($px<1){
			$px=1;
		}
		if($px>$maxPage){
			$px=$maxPage;
		}
		$arr[]=$px;
	}
	$arr=array_unique($arr);//去重
	$arrMin=reset($arr);//数组中第一个的值
	$arrMax=end($arr);//数组中最大的值
	$sldHaveNum=$imax-$imin+1;//最多应该返回好多个页码
	$diffNum=$sldHaveNum-count($arr);//还差好多个
	if($diffNum==0){
		return $arr;
	}
	//获取更多的页码
	for($j=1;$j<=$diffNum;$j++){
		$px=$arrMax+$j;
		if($px<=$maxPage){
			$arr[]=$px;
		}else{
			$px=$arrMin-$j;
			if($px>=1){
				array_unshift($arr,$px);//在最前面插入
			}
		}
	}
	return $arr;
}
/**获取上一页页码*/
function getPrevPage($p){
	$prev=$p-1;
	if($prev<1){
		$prev=1;
	}
	return $prev;
}
/**
 * 获取下一页页码
 */
function getNextPage($p,$maxPage){
	$next=$p+1;
	if($next>$maxPage){
		$next=$maxPage;
	}
	return $next;
}
/**
 * 字符串按某个字符拆分成数组
*/
function str2arr($char,$str){
	$data=array();
	if($str!=''){
		$data=explode($char,$str);
	}
	return $data;
}
/**
 * 用于后台导航显示判断
 * rightstr内是可以显示的类型，用逗号隔开
 * type 是当前用户的类型，用逗号隔开 如 2,3,5-V,9-V
 * 只要当前类型中有可以显示的类型中的任意一个就返回yes
 * 不包含 返回no
*/
function showMyLi($rightstr,$type){
	$rightarr=explode(',',$rightstr);
	$type=explode(',',$type);
	foreach ($type as $v){
		$v=explode('-',$v);
		if(in_array($v[0],$rightarr)){
			return 'yes';
		}
	}
	return 'no';
}
/**
 * 根据用户类型判断是否可有操作处理权限
 * 返回v表示只能查看不能操作
 * type 用户类型如 2,3,5-V,9-V
 * current_modid  如2
*/
function adminCanOp($type,$current_modid){
	if($type==0 || $type==1){
		return 'op';
	}
	$type=explode(',',$type);
	if(in_array($current_modid,$type) && !in_array($current_modid.'-V',$type)){
		return 'op';
	}
	return 'v';
}
/**
 * 判断是否显示一个菜单
 */
function canLiShow($admintype,$myfuns,$listr){
	if($admintype==0){
		return 1;
	}
	if(in_array($listr,$myfuns)){
		return 1;
	}
	return 0;
}
/**
 * 获取从今天开始7天的日期和描述
*/
function get7Date($format='m月d日'){
	$day1=time();
	$day2=strtotime("+1 day");
	$day3=strtotime("+2 day");
	$day4=strtotime("+3 day");
	$day5=strtotime("+4 day");
	$day6=strtotime("+5 day");
	$day7=strtotime("+6 day");
	$weekarray=array("日","一","二","三","四","五","六");
	$data=array(
		array('day'=>date($format,$day1),'desc'=>'今天','format'=>date('Y-m-d',$day1)),
		array('day'=>date($format,$day2),'desc'=>'明天','format'=>date('Y-m-d',$day2)),
		array('day'=>date($format,$day3),'desc'=>'星期'.$weekarray[date("w",$day3)],'format'=>date('Y-m-d',$day3)),
		array('day'=>date($format,$day4),'desc'=>'星期'.$weekarray[date('w',$day4)],'format'=>date('Y-m-d',$day4)),
		array('day'=>date($format,$day5),'desc'=>'星期'.$weekarray[date('w',$day5)],'format'=>date('Y-m-d',$day5)),
		array('day'=>date($format,$day6),'desc'=>'星期'.$weekarray[date('w',$day6)],'format'=>date('Y-m-d',$day6)),
		array('day'=>date($format,$day7),'desc'=>'星期'.$weekarray[date('w',$day7)],'format'=>date('Y-m-d',$day7))
	);
	return $data;
}
/**
 * 判断是场地返回2 是路考返回3
 * 场地=场训=科目二=2
 * 路考=路训=科目三=3
 */
function k2_or_k3($kname){
	if($kname=='场地'||$kname=='场训'||$kname=='科目二'||$kname==2){
		return '2';
	}
	if($kname=='路考'||$kname=='路训'||$kname=='科目三'||$kname==3){
		return '3';
	}
	return false;
}
/**
 * 接收场地或路考
 * 不管传的场地=场训=科目二 都转成场地
 * 传路考=路训=科目三都转成路考
 * 数据库中存储统一用路考或场地
*/
function formatkname($kname){
	if($kname=='场地'||$kname=='场训'||$kname=='科目二'||$kname==2){
		return '场地';
	}
	if($kname=='路考'||$kname=='路训'||$kname=='科目三'||$kname==3){
		return '路考';
	}
	return false;
}
/**
 * 数据库里面查出来是场地 路考
 * 要转成 科目二或科目三
 *
*/
function formatTeachToKemu($kname){
	if($kname=='场地'||$kname=='场训'||$kname=='科目二'||$kname==2){
		return '科目二';
	}
	if($kname=='路考'||$kname=='路训'||$kname=='科目三'||$kname==3){
		return '科目三';
	}
	return false;
}
/**
 * 数据库里面查出来是场地 路考
 * 要转成 科目二或科目三
 *
 */
function formatTeachToChangxun($kname){
	if($kname=='场地'||$kname=='场训'||$kname=='科目二'||$kname==2){
		return '场训';
	}
	if($kname=='路考'||$kname=='路训'||$kname=='科目三'||$kname==3){
		return '路训';
	}
	return false;
}
/**
 * 判断请求是否来自移动端还是PC端
 * 只针对pc和移动端网页有效
*/
function isMobile(){
	// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
	if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){
		return TRUE;
	}
	// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
	if (isset ($_SERVER['HTTP_VIA'])){
		return stristr($_SERVER['HTTP_VIA'], "wap") ? TRUE : FALSE;// 找不到为flase,否则为TRUE
	}
	// 判断手机发送的客户端标志,兼容性有待提高
	if (isset ($_SERVER['HTTP_USER_AGENT'])) {
		$clientkeywords = array (
			'mobile',
			'nokia',
			'sony',
			'ericsson',
			'mot',
			'samsung',
			'htc',
			'sgh',
			'lg',
			'sharp',
			'sie-',
			'philips',
			'panasonic',
			'alcatel',
			'lenovo',
			'iphone',
			'ipod',
			'blackberry',
			'meizu',
			'android',
			'netfront',
			'symbian',
			'ucweb',
			'windowsce',
			'palm',
			'operamini',
			'operamobi',
			'openwave',
			'nexusone',
			'cldc',
			'midp',
			'wap'
		);
		// 从HTTP_USER_AGENT中查找手机浏览器的关键字
		if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))){
			return TRUE;
		}
	}
	if (isset ($_SERVER['HTTP_ACCEPT'])){ // 协议法，因为有可能不准确，放到最后判断
		// 如果只支持wml并且不支持html那一定是移动设备
		// 如果支持wml和html但是wml在html之前则是移动设备
		if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== FALSE) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === FALSE || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))){
			return TRUE;
		}
	}
	return FALSE;
}





